package org.ns.basics.commons.localex;

import java.util.HashMap;
import java.util.Locale;
import java.util.Map;

public class LocaleMap {

	private Map<String, LocaleMessage> locales = new HashMap<>();
	private boolean ignoreCase = true;

	public LocaleMap() {

	}

	public LocaleMap(boolean ignoreCase) {
		super();
		this.ignoreCase = ignoreCase;
	}

	public void put(Locale locale, String key, String message) {
		put(locale.getLanguage(), key, message);
	}

	public void put(String locale, String key, String message) {
		LocaleMessage localeMessage = locales.get(locale);
		if (localeMessage == null) {
			localeMessage = new LocaleMessage();
			locales.putIfAbsent(locale, localeMessage);
			localeMessage = locales.get(locale);
		}
		if (ignoreCase) {
			localeMessage.msg.put(key.toUpperCase(), message);
		} else {
			localeMessage.msg.put(key, message);
		}
	}

	public String get(Locale locale, String key) {
		LocaleMessage localeMessage = locales.get(locale.getLanguage());
		if (localeMessage == null) {
			return null;
		}
		if (ignoreCase) {
			return localeMessage.msg.get(key.toUpperCase());
		} else {
			return localeMessage.msg.get(key);
		}
	}

	private static class LocaleMessage {
		private Map<String, String> msg = new HashMap<>();

	}
}
